--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / TutorialModal.vue
Displaying Raw • Download
meshchatx/src/frontend/components/TutorialModal.vue 2b6cef04d02950e606e2a93d67c66b0c0ea31fab (2b6cef04) Text, 73.77 KB
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72v-dialog
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3isPageTa5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3visibleTa5d6ff"
Tb4b4b4:Te6edf3fullscreenTff7b72=Ta5d6ff"Te6edf3isMobileTa5d6ff"
Te6edf3max-widthTff7b72=Ta5d6ff"800"
Te6edf3transitionTff7b72=Ta5d6ff"dialog-bottom-transition"
Te6edf3classTff7b72=Ta5d6ff"tutorial-dialog"
Te6edf3persistent
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3onVisibleUpdateTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-card Te6edf3classTff7b72=Ta5d6ff"flex flex-col h-full bg-white dark:bg-zinc-950 border-0 overflow-hidden"Tb4b4b4>
T8b949e<!-- Progress Bar -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-100 dark:bg-zinc-900 overflow-hidden flex"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3step Tff7b72in Te6edf3totalStepsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3stepTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"h-full transition-all duration-500 ease-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3currentStep Tff7b72>= Te6edf3step Tff7b72? Ta5d6ff'bg-blue-500' Tff7b72: Ta5d6ff'bg-transparent'Tb4b4b4,
Te6edf3currentStep Tff7b72=== Te6edf3step Tff7b72? Ta5d6ff'flex-[2]' Tff7b72: Ta5d6ff'flex-1'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4:Te6edf3styleTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3borderRightTff7b72: Te6edf3step Tff7b72< Te6edf3totalSteps Tff7b72? Ta5d6ff'1px solid rgba(0,0,0,0.05)' Tff7b72: Ta5d6ff'none' Tb4b4b4}Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Content Area -->
Tb4b4b4<Tff7b72v-card-text Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto px-6 md:px-12 py-10 relative"Tb4b4b4>
Tb4b4b4<Tff7b72transition Te6edf3nameTff7b72=Ta5d6ff"fade-slide" Te6edf3modeTff7b72=Ta5d6ff"out-in"Tb4b4b4>
T8b949e<!-- Step 1: Welcome -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff1Ta5d6ff" Te6edf3keyTff7b72=Ta5d6ff"step1" Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center text-center space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-24 h-24 bg-blue-500/10 rounded-3xl rotate-12 absolute -inset-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72img Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3logoUrlTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-24 h-24 relative z-10 p-2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72h1 Te6edf3classTff7b72=Ta5d6ff"text-4xl font-black tracking-tight text-gray-900 dark:text-white"Tb4b4b4>
Welcome to Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-blue-500"Tb4b4b4>MeshChatXTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-lg text-gray-600 dark:text-zinc-400 max-w-md mx-auto"Tb4b4b4>
The future of off-grid communication. Secure, decentralized, and unstoppable.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 md:grid-cols-2 gap-4 w-full mt-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-shield-lock" Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Security & PerformanceTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
Massive improvements in speed, security, and crash recovery.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-map-marker-path" Te6edf3colorTff7b72=Ta5d6ff"purple" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>MapsTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
OpenLayers w/ MBTiles support and custom API endpoints.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-phone" Te6edf3colorTff7b72=Ta5d6ff"green" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Full LXST VoiceTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
Voicemail, ringtones, phonebook, and contact sharing.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-tools" Te6edf3colorTff7b72=Ta5d6ff"orange" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Advanced ToolsTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
Micron Editor, Paper Messages, RNS tools, Docs.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-database-search" Te6edf3colorTff7b72=Ta5d6ff"teal" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Crawler & ArchiverTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
Automated network crawling and page archiving.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-keyboard-outline" Te6edf3colorTff7b72=Ta5d6ff"red" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>
Command Palette + Keybindings
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>
Navigate everything instantly and customize shortcuts.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-translate" Te6edf3colorTff7b72=Ta5d6ff"cyan" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>i18n SupportTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500"Tb4b4b4>Available in English, German, and Russian.Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 2: Add Interface -->
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff2Ta5d6ff" Te6edf3keyTff7b72=Ta5d6ff"step2" Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-white"Tb4b4b4>Connect to the MeshTb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-600 dark:text-zinc-400"Tb4b4b4>
To send messages, you need to connect to a Reticulum interface.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3showCustomFormTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
T8b949e<!-- Community Interfaces -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-gray-50 dark:bg-zinc-900 rounded-3xl p-4 border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 mb-4 px-2"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-web" Te6edf3colorTff7b72=Ta5d6ff"blue"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Suggested Public RelaysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2 max-h-[300px] overflow-y-auto pr-2"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3iface Tff7b72in Te6edf3communityInterfacesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between p-3 bg-white dark:bg-zinc-800 rounded-2xl border border-gray-100 dark:border-zinc-700 hover:border-blue-400 transition-colors cursor-pointer"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3selectCommunityInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Tff7b72{{
Te6edf3ifaceTb4b4b4.Te6edf3name
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500"
Tb4b4b4>Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3target_host Tff7b72}}:Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3target_port Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3onlineTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1 text-[10px] font-bold text-green-500 uppercase tracking-wider"
Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Online
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3sizeTff7b72=Ta5d6ff"small"
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#3b82f6"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3classTff7b72=Ta5d6ff"font-bold text-white"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3selectCommunityInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Tb4b4b4>UseTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3loadingInterfacesTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex justify-center py-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-progress-circular Te6edf3indeterminate Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"24"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-progress-circularTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center text-sm text-gray-500 dark:text-zinc-500"Tb4b4b4>ORTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Custom Interface -->
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"font-bold h-12 dark:text-blue-400"
Te6edf3prepend-iconTff7b72=Ta5d6ff"mdi-plus"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCustomInterfacePromptTa5d6ff"
Tb4b4b4>
Manual Configuration
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Custom Interface Form -->
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4 animate-in fade-in slide-in-from-bottom-4 duration-300"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-gray-50 dark:bg-zinc-900 rounded-3xl p-6 border border-gray-100 dark:border-zinc-800 space-y-4"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-2"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Custom InterfaceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72v-btn Te6edf3sizeTff7b72=Ta5d6ff"small" Te6edf3variantTff7b72=Ta5d6ff"text" Te6edf3colorTff7b72=Ta5d6ff"gray" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCustomForm Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>CancelTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3typeTa5d6ff"
Tb4b4b4:Te6edf3itemsTff7b72=Ta5d6ff"Te6edf3interfaceTypesTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Interface Type"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-selectTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Interface Name"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. My Relay"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
T8b949e<!-- TCP Client Fields -->
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'TCPClientInterface'Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3target_hostTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Target Host"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. 1.2.3.4 or example.com"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3target_portTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Target Port"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3placeholderTff7b72=Ta5d6ff"4242"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- Server/UDP Fields -->
Tb4b4b4<Tff7b72template
Te6edf3v-ifTff7b72=Ta5d6ff"
Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'TCPServerInterface' Tff7b72||
Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'UDPInterface'
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3listen_ipTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Listen IP"
Te6edf3placeholderTff7b72=Ta5d6ff"0.0.0.0"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3listen_portTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Listen Port"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3placeholderTff7b72=Ta5d6ff"4242"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- RNode/Serial/KISS Fields -->
Tb4b4b4<Tff7b72template
Te6edf3v-ifTff7b72=Ta5d6ff"
Tb4b4b4[
Ta5d6ff'RNodeInterface'Tb4b4b4,
Ta5d6ff'RNodeMultiInterface'Tb4b4b4,
Ta5d6ff'SerialInterface'Tb4b4b4,
Ta5d6ff'KISSInterface'Tb4b4b4,
Ta5d6ff'AX25KISSInterface'Tb4b4b4,
Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3newInterfaceTb4b4b4.Te6edf3typeTb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3portTa5d6ff"
Tb4b4b4:Te6edf3itemsTff7b72=Ta5d6ff"Te6edf3comportsTa5d6ff"
Te6edf3item-titleTff7b72=Ta5d6ff"device"
Te6edf3item-valueTff7b72=Ta5d6ff"device"
Te6edf3labelTff7b72=Ta5d6ff"Serial Port"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-selectTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-ifTff7b72=Ta5d6ff"
Tb4b4b4[Ta5d6ff'SerialInterface'Tb4b4b4, Ta5d6ff'KISSInterface'Tb4b4b4, Ta5d6ff'AX25KISSInterface'Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(
Te6edf3newInterfaceTb4b4b4.Te6edf3type
Tb4b4b4)
Ta5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3speedTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Baud Rate"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- Pipe Interface Fields -->
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'PipeInterface'Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3commandTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Command"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. netcat -l 5757"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3hide-details
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3roundedTff7b72=Ta5d6ff"lg"
Te6edf3classTff7b72=Ta5d6ff"font-bold h-12 text-white mt-4"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addCustomInterfaceTa5d6ff"
Tb4b4b4>
Add Interface
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-[10px] text-center text-gray-500"Tb4b4b4>
More advanced options are available in the full Interface settings after setup.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 3: Documentation & Tools -->
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff3Ta5d6ff" Te6edf3keyTff7b72=Ta5d6ff"step3" Te6edf3classTff7b72=Ta5d6ff"space-y-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-white"Tb4b4b4>Learn & CreateTb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-600 dark:text-zinc-400"Tb4b4b4>
Discover how to use MeshChatX to its full potential.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-book-open-variant" Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>DocumentationTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 mb-2"Tb4b4b4>
Read the official MeshChatX and Reticulum documentation.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3hrefTff7b72=Ta5d6ff"/meshchatx-docs/index.html"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Tb4b4b4>MeshChatX DocsTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"purple"
Te6edf3hrefTff7b72=Ta5d6ff"https://reticulum.network/manual/"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Tb4b4b4>Reticulum DocsTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-4 p-4 rounded-2xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-file-document-edit-outline" Te6edf3colorTff7b72=Ta5d6ff"orange" Te6edf3sizeTff7b72=Ta5d6ff"32"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white"Tb4b4b4>Micron EditorTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 mb-2"Tb4b4b4>
Take a look at the Micron Editor for a guide on creating mesh-native pages.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3sizeTff7b72=Ta5d6ff"x-small"
Te6edf3variantTff7b72=Ta5d6ff"tonal"
Te6edf3colorTff7b72=Ta5d6ff"orange"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff'micron-editor' Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3visible Tff7b72= Tff7b72falseTb4b4b4;
Ta5d6ff"
Tb4b4b4>Open Micron EditorTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 4: Finish -->
Tb4b4b4<Tff7b72div
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3keyTff7b72=Ta5d6ff"step4"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center text-center space-y-8 py-10"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-32 h-32 bg-green-500/10 rounded-full flex items-center justify-center relative"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-check-decagram" Te6edf3colorTff7b72=Ta5d6ff"green" Te6edf3sizeTff7b72=Ta5d6ff"80"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 bg-green-500/20 rounded-full animate-ping opacity-20"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-3xl font-black text-gray-900 dark:text-white"Tb4b4b4>Ready to Roll!Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-lg text-gray-600 dark:text-zinc-400 max-w-md mx-auto"Tb4b4b4>
Everything is set up. You need to restart the application for the changes to take
effect.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"p-4 bg-amber-50 dark:bg-amber-900/20 rounded-2xl border border-amber-100 dark:border-amber-900/30 text-amber-700 dark:text-amber-400 text-sm flex gap-3 max-w-md text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-information-outline" Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72span
Tb4b4b4>If you're running in Docker, make sure your container auto-restarts or start it
manually after it stops.Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72transitionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-card-textTb4b4b4>
T8b949e<!-- Footer -->
Tb4b4b4<Tff7b72v-divider Te6edf3classTff7b72=Ta5d6ff"dark:border-zinc-900"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-dividerTb4b4b4>
Tb4b4b4<Tff7b72v-card-actions Te6edf3classTff7b72=Ta5d6ff"px-6 py-6 bg-gray-50 dark:bg-zinc-950/50 flex justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72> T79c0ff1 Tff7b72&& Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"text"
Te6edf3colorTff7b72=Ta5d6ff"gray"
Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-700 dark:text-zinc-300"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3currentStepTff7b72--Ta5d6ff"
Tb4b4b4>BackTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-elseTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"text"
Te6edf3colorTff7b72=Ta5d6ff"gray"
Te6edf3classTff7b72=Ta5d6ff"font-bold opacity-50 hover:opacity-100 text-gray-700 dark:text-zinc-300"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3skipTutorialTa5d6ff"
Tb4b4b4>SkipTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#3b82f6"
Te6edf3classTff7b72=Ta5d6ff"px-8 font-black tracking-wide h-12 text-white"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3nextStepTa5d6ff"
Tb4b4b4>NextTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-else
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#22c55e"
Te6edf3classTff7b72=Ta5d6ff"px-8 font-black tracking-wide h-12 text-white"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3finishAndRestartTa5d6ff"
Tb4b4b4>Restart & Start ChattingTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-card-actionsTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-cardTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-dialogTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"flex flex-col h-full bg-white dark:bg-zinc-950 overflow-hidden"Tb4b4b4>
T8b949e<!-- Progress Bar -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full h-1.5 bg-gray-100 dark:bg-zinc-900 overflow-hidden flex"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3step Tff7b72in Te6edf3totalStepsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3stepTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"h-full transition-all duration-500 ease-out"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3currentStep Tff7b72>= Te6edf3step Tff7b72? Ta5d6ff'bg-blue-500' Tff7b72: Ta5d6ff'bg-transparent'Tb4b4b4,
Te6edf3currentStep Tff7b72=== Te6edf3step Tff7b72? Ta5d6ff'flex-[2]' Tff7b72: Ta5d6ff'flex-1'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4:Te6edf3styleTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3borderRightTff7b72: Te6edf3step Tff7b72< Te6edf3totalSteps Tff7b72? Ta5d6ff'1px solid rgba(0,0,0,0.05)' Tff7b72: Ta5d6ff'none' Tb4b4b4}Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto px-6 md:px-12 py-10"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"max-w-4xl mx-auto h-full flex flex-col justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72transition Te6edf3nameTff7b72=Ta5d6ff"fade-slide" Te6edf3modeTff7b72=Ta5d6ff"out-in"Tb4b4b4>
T8b949e<!-- Step 1: Welcome -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff1Ta5d6ff"
Te6edf3keyTff7b72=Ta5d6ff"step1"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center text-center space-y-8 py-10"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-32 h-32 bg-blue-500/10 rounded-3xl rotate-12 absolute -inset-2"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72img Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3logoUrlTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-32 h-32 relative z-10 p-2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72h1 Te6edf3classTff7b72=Ta5d6ff"text-5xl font-black tracking-tight text-gray-900 dark:text-white"Tb4b4b4>
Welcome to Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-blue-500"Tb4b4b4>MeshChatXTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xl text-gray-600 dark:text-zinc-400 max-w-2xl mx-auto"Tb4b4b4>
The future of off-grid communication. Secure, decentralized, and unstoppable.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 w-full mt-12"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-shield-lock" Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>
Security & Performance
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Massive improvements in speed, security, and integrity with built-in crash
recovery.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-map-marker-path" Te6edf3colorTff7b72=Ta5d6ff"purple" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>MapsTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
OpenLayers support with offline MBTiles and custom API endpoints for online
maps.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-phone" Te6edf3colorTff7b72=Ta5d6ff"green" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>Full LXST VoiceTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Crystal clear voice calls over mesh. Voicemail, custom ringtones, and phonebook
discovery.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-tools" Te6edf3colorTff7b72=Ta5d6ff"orange" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>Advanced ToolsTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Micron editor, paper messages, RNS tools, and integrated documentation.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-database-search" Te6edf3colorTff7b72=Ta5d6ff"teal" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>
Crawler & Archiver
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Automated network crawling and page archiving tools for offline browsing.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-keyboard-outline" Te6edf3colorTff7b72=Ta5d6ff"red" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>
Command Palette + Keybindings
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Navigate the entire application and customize your workflow with instant
shortcuts.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex items-start gap-6 p-6 rounded-3xl bg-gray-50 dark:bg-zinc-900 text-left border border-gray-100 dark:border-zinc-800 transition-all hover:scale-[1.03] hover:shadow-2xl hover:z-10"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-translate" Te6edf3colorTff7b72=Ta5d6ff"cyan" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-xl text-gray-900 dark:text-white"Tb4b4b4>i18n SupportTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500"Tb4b4b4>
Full internationalization support for English, German, and Russian languages.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 2: Add Interface -->
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff2Ta5d6ff" Te6edf3keyTff7b72=Ta5d6ff"step2" Te6edf3classTff7b72=Ta5d6ff"space-y-8 py-10"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-4xl font-black text-gray-900 dark:text-white"Tb4b4b4>Connect to the MeshTb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xl text-gray-600 dark:text-zinc-400 max-w-2xl mx-auto"Tb4b4b4>
To send messages and make calls, you need to connect to a Reticulum interface.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 lg:grid-cols-2 gap-8"Tb4b4b4>
T8b949e<!-- Community Interfaces -->
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-gray-50 dark:bg-zinc-900 rounded-[2rem] p-8 border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3 mb-6"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-web" Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"28"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xl font-bold text-gray-900 dark:text-white"
Tb4b4b4>Suggested Public RelaysTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-3 max-h-[400px] overflow-y-auto pr-4 custom-scrollbar"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3iface Tff7b72in Te6edf3communityInterfacesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between p-4 bg-white dark:bg-zinc-800 rounded-2xl border border-gray-100 dark:border-zinc-700 hover:border-blue-400 transition-all cursor-pointer group shadow-sm hover:shadow-md"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3selectCommunityInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"font-bold text-gray-900 dark:text-white text-lg group-hover:text-blue-500 transition-colors"
Tb4b4b4>Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3name Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 font-mono"
Tb4b4b4>Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3target_host Tff7b72}}:Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3target_port Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3onlineTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5 text-[10px] font-bold text-green-500 uppercase tracking-widest"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"w-2 h-2 rounded-full bg-green-500 animate-pulse"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Online
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#3b82f6"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"font-black px-6 text-white"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3selectCommunityInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Tb4b4b4>UseTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3loadingInterfacesTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex justify-center py-10"Tb4b4b4>
Tb4b4b4<Tff7b72v-progress-circular Te6edf3indeterminate Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"40"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-progress-circularTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3showCustomFormTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col justify-center space-y-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative py-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 flex items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full border-t border-gray-200 dark:border-zinc-800"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"relative flex justify-center text-sm font-black uppercase tracking-widest"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-950 px-4 text-gray-400"Tb4b4b4>Custom SetupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 text-center px-6 text-lg"Tb4b4b4>
Already have a private relay or hardware RNode? Add it manually to connect to
your own mesh.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3roundedTff7b72=Ta5d6ff"2xl"
Te6edf3classTff7b72=Ta5d6ff"font-black h-20 text-xl border-2 dark:text-blue-400"
Te6edf3prepend-iconTff7b72=Ta5d6ff"mdi-plus"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCustomInterfacePromptTa5d6ff"
Tb4b4b4>
Manual Configuration
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Custom Interface Form (Page Mode) -->
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"space-y-6 animate-in fade-in slide-in-from-right-4 duration-500 bg-gray-50 dark:bg-zinc-900 rounded-[2rem] p-8 border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-white"Tb4b4b4>Custom InterfaceTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72v-btn Te6edf3variantTff7b72=Ta5d6ff"text" Te6edf3colorTff7b72=Ta5d6ff"gray" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCustomForm Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>Back to suggestedTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-5"Tb4b4b4>
Tb4b4b4<Tff7b72v-select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3typeTa5d6ff"
Tb4b4b4:Te6edf3itemsTff7b72=Ta5d6ff"Te6edf3interfaceTypesTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Interface Type"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4:Te6edf3menu-propsTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3attachTff7b72: Tff7b72true Tb4b4b4}Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-selectTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Interface Name"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. My Relay"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
T8b949e<!-- TCP Client Fields -->
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'TCPClientInterface'Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3target_hostTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Target Host"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. 1.2.3.4"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3target_portTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Target Port"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- Server/UDP Fields -->
Tb4b4b4<Tff7b72template
Te6edf3v-ifTff7b72=Ta5d6ff"
Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'TCPServerInterface' Tff7b72||
Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'UDPInterface'
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3listen_ipTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Listen IP"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3listen_portTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Listen Port"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- RNode/Serial/KISS Fields -->
Tb4b4b4<Tff7b72template
Te6edf3v-ifTff7b72=Ta5d6ff"
Tb4b4b4[
Ta5d6ff'RNodeInterface'Tb4b4b4,
Ta5d6ff'RNodeMultiInterface'Tb4b4b4,
Ta5d6ff'SerialInterface'Tb4b4b4,
Ta5d6ff'KISSInterface'Tb4b4b4,
Ta5d6ff'AX25KISSInterface'Tb4b4b4,
Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3newInterfaceTb4b4b4.Te6edf3typeTb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-select
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3portTa5d6ff"
Tb4b4b4:Te6edf3itemsTff7b72=Ta5d6ff"Te6edf3comportsTa5d6ff"
Te6edf3item-titleTff7b72=Ta5d6ff"device"
Te6edf3item-valueTff7b72=Ta5d6ff"device"
Te6edf3labelTff7b72=Ta5d6ff"Serial Port"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4:Te6edf3menu-propsTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3attachTff7b72: Tff7b72true Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72template #Te6edf3itemTff7b72=Ta5d6ff"{ props, item }"Tb4b4b4>
Tb4b4b4<Tff7b72v-list-item Te6edf3v-bindTff7b72=Ta5d6ff"Te6edf3propsTa5d6ff" Tb4b4b4:Te6edf3subtitleTff7b72=Ta5d6ff"Te6edf3itemTb4b4b4.Te6edf3rawTb4b4b4.Te6edf3productTa5d6ff"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-list-itemTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-selectTb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-ifTff7b72=Ta5d6ff"
Tb4b4b4[Ta5d6ff'SerialInterface'Tb4b4b4, Ta5d6ff'KISSInterface'Tb4b4b4, Ta5d6ff'AX25KISSInterface'Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(
Te6edf3newInterfaceTb4b4b4.Te6edf3type
Tb4b4b4)
Ta5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3speedTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Baud Rate"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
T8b949e<!-- Pipe Interface Fields -->
Tb4b4b4<Tff7b72template Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff'PipeInterface'Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72v-text-field
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newInterfaceTb4b4b4.Te6edf3commandTa5d6ff"
Te6edf3labelTff7b72=Ta5d6ff"Command"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. netcat -l 5757"
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3densityTff7b72=Ta5d6ff"comfortable"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-800"
Te6edf3bg-colorTff7b72=Ta5d6ff"white"
Te6edf3base-colorTff7b72=Ta5d6ff"gray"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3persistent-placeholder
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-text-fieldTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3classTff7b72=Ta5d6ff"h-16 text-lg font-bold text-white mt-4"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addCustomInterfaceTa5d6ff"
Tb4b4b4>
Add & Connect
Tb4b4b4<Tb4b4b4/Tff7b72v-btnTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm text-center text-gray-500"Tb4b4b4>
Additional configuration like frequencies, encryption, and modes can be adjusted
in the full Interface settings later.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 3: Documentation & Tools -->
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff3Ta5d6ff" Te6edf3keyTff7b72=Ta5d6ff"step3" Te6edf3classTff7b72=Ta5d6ff"space-y-8 py-10"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-4xl font-black text-gray-900 dark:text-white"Tb4b4b4>Learn & CreateTb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xl text-gray-600 dark:text-zinc-400 max-w-2xl mx-auto"Tb4b4b4>
Discover how to use MeshChatX to its full potential and create your own content.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 md:grid-cols-2 gap-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center gap-6 p-8 rounded-[2rem] bg-gray-50 dark:bg-zinc-900 text-center border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-book-open-variant" Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"64"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-2xl text-gray-900 dark:text-white mb-2"Tb4b4b4>
Documentation
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 mb-6"Tb4b4b4>
Comprehensive guides for MeshChatX and the underlying Reticulum Network Stack.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3classTff7b72=Ta5d6ff"h-12 font-bold text-white"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3hrefTff7b72=Ta5d6ff"/meshchatx-docs/index.html"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Tb4b4b4>Read MeshChatX DocsTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3variantTff7b72=Ta5d6ff"outlined"
Te6edf3colorTff7b72=Ta5d6ff"purple"
Te6edf3classTff7b72=Ta5d6ff"h-12 font-bold"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Te6edf3hrefTff7b72=Ta5d6ff"https://reticulum.network/manual/"
Te6edf3targetTff7b72=Ta5d6ff"_blank"
Tb4b4b4>Reticulum Network ManualTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center gap-6 p-8 rounded-[2rem] bg-gray-50 dark:bg-zinc-900 text-center border border-gray-100 dark:border-zinc-800"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-file-document-edit-outline" Te6edf3colorTff7b72=Ta5d6ff"orange" Te6edf3sizeTff7b72=Ta5d6ff"64"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-2xl text-gray-900 dark:text-white mb-2"Tb4b4b4>
Micron Editor
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-gray-500 mb-6"Tb4b4b4>
Learn how to create mesh-native pages and interactive content using the Micron
markup language.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3block
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"orange"
Te6edf3classTff7b72=Ta5d6ff"h-12 font-bold text-white"
Te6edf3roundedTff7b72=Ta5d6ff"xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff'micron-editor' Tb4b4b4}Tb4b4b4)Ta5d6ff"
Tb4b4b4>Open Micron EditorTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Step 4: Finish -->
Tb4b4b4<Tff7b72div
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72=== T79c0ff4Ta5d6ff"
Te6edf3keyTff7b72=Ta5d6ff"step4"
Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center text-center space-y-10 py-20"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-48 h-48 bg-green-500/10 rounded-full flex items-center justify-center relative"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-check-decagram" Te6edf3colorTff7b72=Ta5d6ff"green" Te6edf3sizeTff7b72=Ta5d6ff"120"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 bg-green-500/20 rounded-full animate-ping opacity-20"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72h2 Te6edf3classTff7b72=Ta5d6ff"text-5xl font-black text-gray-900 dark:text-white"Tb4b4b4>Ready to Roll!Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-xl text-gray-600 dark:text-zinc-400 max-w-2xl mx-auto"Tb4b4b4>
MeshChatX is now configured. You need to restart the application to finalize the
connection.
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"p-6 bg-amber-50 dark:bg-amber-900/20 rounded-3xl border border-amber-100 dark:border-amber-900/30 text-amber-700 dark:text-amber-400 flex gap-4 max-w-xl text-left"
Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-information-outline" Te6edf3sizeTff7b72=Ta5d6ff"32" Te6edf3classTff7b72=Ta5d6ff"shrink-0"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-bold text-lg"Tb4b4b4>Restart RequiredTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"opacity-90"Tb4b4b4>
If you're running in Docker, ensure your container auto-restarts. Native apps will
relaunch automatically.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72transitionTb4b4b4>
T8b949e<!-- Navigation Buttons (Page Mode) -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-between items-center mt-12 border-t dark:border-zinc-900 pt-8"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72> T79c0ff1 Tff7b72&& Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"text"
Te6edf3colorTff7b72=Ta5d6ff"gray"
Te6edf3classTff7b72=Ta5d6ff"font-black h-12 px-8 text-gray-700 dark:text-zinc-300"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3currentStepTff7b72--Ta5d6ff"
Tb4b4b4>BackTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-elseTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"text"
Te6edf3colorTff7b72=Ta5d6ff"gray"
Te6edf3classTff7b72=Ta5d6ff"font-black h-12 px-8 opacity-50 hover:opacity-100 text-gray-700 dark:text-zinc-300"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3skipTutorialTa5d6ff"
Tb4b4b4>Skip SetupTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3currentStep Tff7b72< Te6edf3totalStepsTa5d6ff"
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#3b82f6"
Te6edf3classTff7b72=Ta5d6ff"px-12 font-black tracking-wide h-14 text-lg text-white"
Te6edf3roundedTff7b72=Ta5d6ff"2xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3nextStepTa5d6ff"
Tb4b4b4>ContinueTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tff7b72v-btn
Te6edf3v-else
Te6edf3variantTff7b72=Ta5d6ff"flat"
Te6edf3colorTff7b72=Ta5d6ff"#22c55e"
Te6edf3classTff7b72=Ta5d6ff"px-12 font-black tracking-wide h-14 text-lg text-white"
Te6edf3roundedTff7b72=Ta5d6ff"2xl"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3finishAndRestartTa5d6ff"
Tb4b4b4>Restart & Start ChattingTb4b4b4<Tb4b4b4/Tff7b72v-btn
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3logoUrl Tff7b72from Ta5d6ff"../assets/images/logo.png"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3ElectronUtils Tff7b72from Ta5d6ff"../js/ElectronUtils"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../js/GlobalState"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"TutorialModal"Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3visibleTff7b72: Tff7b72falseTb4b4b4,
Te6edf3currentStepTff7b72: T79c0ff1Tb4b4b4,
Te6edf3totalStepsTff7b72: T79c0ff4Tb4b4b4,
Te6edf3logoUrlTb4b4b4,
Te6edf3communityInterfacesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3loadingInterfacesTff7b72: Tff7b72falseTb4b4b4,
Te6edf3showCustomFormTff7b72: Tff7b72falseTb4b4b4,
Te6edf3comportsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3newInterfaceTff7b72: Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"TCPClientInterface"Tb4b4b4,
Te6edf3target_hostTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3target_portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3listen_ipTff7b72: Ta5d6ff"0.0.0.0"Tb4b4b4,
Te6edf3listen_portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3deviceTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3portTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3speedTff7b72: T79c0ff115200Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3interfaceTypesTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"TCP Client"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"TCPClientInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"TCP Server"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"TCPServerInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"UDP Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"UDPInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"RNode Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"RNodeInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"RNode Multi"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"RNodeMultiInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"Serial Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"SerialInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"KISS Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"KISSInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"AX.25 KISS"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"AX25KISSInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"I2P Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"I2PInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"Auto Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"AutoInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3titleTff7b72: Ta5d6ff"Pipe Interface"Tb4b4b4, Te6edf3valueTff7b72: Ta5d6ff"PipeInterface" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isPageTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3metaTff7b72?Tb4b4b4.Te6edf3isPage Tff7b72=== Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isMobileTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657windowTb4b4b4.Te6edf3innerWidth Tff7b72< T79c0ff640Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPageTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadCommunityInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3loadComportsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3showTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3visible Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3currentStep Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadCommunityInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadComportsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadComportsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/comports"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3comports Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3comportsTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to load comports:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadCommunityInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadingInterfaces Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/community-interfaces"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3communityInterfaces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3interfacesTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to load community interfaces:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadingInterfaces Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3selectCommunityInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/add"Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3typeTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4,
Te6edf3target_hostTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3target_hostTb4b4b4,
Te6edf3target_portTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3target_portTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff`Ta5d6ffAdded interface: Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3nameTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
T8b949e// track change
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3nextStepTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to add interface"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3showCustomInterfacePromptTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showCustomForm Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3addCustomInterfaceTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3nameTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Please enter an interface name"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3payload Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3typeTff7b72: Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3typeTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"TCPClientInterface"Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3target_host Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3target_hostTb4b4b4;
Te6edf3payloadTb4b4b4.Te6edf3target_port Tff7b72= Tffa657parseIntTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3target_portTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"TCPServerInterface" Tff7b72||
Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"UDPInterface"
Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3listen_ip Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3listen_ipTb4b4b4;
Te6edf3payloadTb4b4b4.Te6edf3listen_port Tff7b72= Tffa657parseIntTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3listen_portTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"UDPInterface"Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3forward_ip Tff7b72= Ta5d6ff"255.255.255.255"Tb4b4b4;
Te6edf3payloadTb4b4b4.Te6edf3forward_port Tff7b72= Tffa657parseIntTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3listen_portTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(
Tb4b4b4[
Ta5d6ff"RNodeInterface"Tb4b4b4,
Ta5d6ff"RNodeMultiInterface"Tb4b4b4,
Ta5d6ff"SerialInterface"Tb4b4b4,
Ta5d6ff"KISSInterface"Tb4b4b4,
Ta5d6ff"AX25KISSInterface"Tb4b4b4,
Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3typeTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3port Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3portTb4b4b4;
Tff7b72if Tb4b4b4(Tb4b4b4[Ta5d6ff"SerialInterface"Tb4b4b4, Ta5d6ff"KISSInterface"Tb4b4b4, Ta5d6ff"AX25KISSInterface"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3typeTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3speed Tff7b72= Tffa657parseIntTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3speedTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"PipeInterface"Tb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3command Tff7b72= Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3commandTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/add"Tb4b4b4, Te6edf3payloadTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff`Ta5d6ffAdded interface: Tffd700${Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3nameTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
T8b949e// track change
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3addTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3newInterfaceTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3nextStepTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to add interface"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3nextStepTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3currentStep Tff7b72< Tff7b72thisTb4b4b4.Te6edf3totalStepsTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3currentStepTff7b72++Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3skipTutorialTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(
Ta5d6ff"Are you sure you want to skip the setup? You'll need to manually add interfaces later."
Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3markSeenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visible Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3markSeenTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/tutorial/seen"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to mark tutorial as seen:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3finishAndRestartTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3markSeenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ElectronUtilsTb4b4b4.Te6edf3isElectronTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3relaunchTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3infoTb4b4b4(Ta5d6ff"Restart the application/container to apply changes."Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3visible Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3onVisibleUpdateTb4b4b4(Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3valTb4b4b4) Tb4b4b4{
T8b949e// if closed by clicking away, mark as seen so it doesn't pop up again
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3markSeenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72style Te6edf3scopedTb4b4b4>
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-fieldTff7b72) Tb4b4b4{
Tff7b72border-radiusTb4b4b4: T79c0ff1Tffa657rem Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-field--variant-outlined Tb4b4b4.T56d364v-field__outlineTff7b72) Tb4b4b4{
Te6edf3--v-field-border-opacityTb4b4b4: T79c0ff0.15Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-field--focused Tb4b4b4.T56d364v-field__outlineTff7b72) Tb4b4b4{
Te6edf3--v-field-border-opacityTb4b4b4: T79c0ff1Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-field__inputTff7b72) Tb4b4b4{
Tff7b72padding-topTb4b4b4: T79c0ff24Tffa657px Tff7b72!importantTb4b4b4;
Tff7b72padding-bottomTb4b4b4: T79c0ff8Tffa657px Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-labelTb4b4b4.T56d364v-field-label--floatingTff7b72) Tb4b4b4{
Tff7b72transformTb4b4b4: Tffa657translateYTb4b4b4(T79c0ff-8Tffa657pxTb4b4b4) Tffa657scaleTb4b4b4(T79c0ff0.75Tb4b4b4) Tff7b72!importantTb4b4b4;
Tff7b72font-weightTb4b4b4: T79c0ff800 Tff7b72!importantTb4b4b4;
Tff7b72text-transformTb4b4b4: Tff7b72uppercase Tff7b72!importantTb4b4b4;
Tff7b72letter-spacingTb4b4b4: T79c0ff0.05Tffa657em Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-select Tb4b4b4.T56d364v-theme--lightTff7b72)Tff7b72,
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-listTff7b72)Tff7b72,
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-list-itemTff7b72) Tb4b4b4{
Tff7b72background-colorTb4b4b4: Tff7b72white Tff7b72!importantTb4b4b4;
Tff7b72colorTb4b4b4: T79c0ff#111827 Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-list-item-titleTff7b72)Tff7b72,
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-list-item-subtitleTff7b72) Tb4b4b4{
Tff7b72colorTb4b4b4: Tff7b72inherit Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364dark Tb4b4b4.T56d364v-listTff7b72)Tff7b72,
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364dark Tb4b4b4.T56d364v-list-itemTff7b72) Tb4b4b4{
Tff7b72background-colorTb4b4b4: T79c0ff#18181b Tff7b72!importantTb4b4b4;
Tff7b72colorTb4b4b4: Tff7b72white Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-field__inputTff7b72) Tb4b4b4{
Tff7b72colorTb4b4b4: Tff7b72inherit Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364v-labelTb4b4b4.T56d364v-field-labelTff7b72) Tb4b4b4{
Tff7b72colorTb4b4b4: T79c0ff#6b7280 Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4:Tf0883edeepTff7b72(Tb4b4b4.T56d364dark Tb4b4b4.T56d364v-labelTb4b4b4.T56d364v-field-labelTff7b72) Tb4b4b4{
Tff7b72colorTb4b4b4: T79c0ff#a1a1aa Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tutorial-dialog Tb4b4b4.T56d364v-overlay__content Tb4b4b4{
Tff7b72border-radiusTb4b4b4: T79c0ff2Tffa657rem Tff7b72!importantTb4b4b4;
Tff7b72overflowTb4b4b4: Tff7b72hiddenTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364fade-slide-enter-activeTff7b72,
Tb4b4b4.T56d364fade-slide-leave-active Tb4b4b4{
Tff7b72transitionTb4b4b4: Tff7b72all T79c0ff0.4Tffa657s Tffa657cubic-bezierTb4b4b4(T79c0ff0.4Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0.2Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364fade-slide-enter-from Tb4b4b4{
Tff7b72opacityTb4b4b4: T79c0ff0Tb4b4b4;
Tff7b72transformTb4b4b4: Tffa657translateXTb4b4b4(T79c0ff30Tffa657pxTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364fade-slide-leave-to Tb4b4b4{
Tff7b72opacityTb4b4b4: T79c0ff0Tb4b4b4;
Tff7b72transformTb4b4b4: Tffa657translateXTb4b4b4(T79c0ff-30Tffa657pxTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4<Tb4b4b4/Tff7b72styleTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────